最近开始了Edx上The Analytics Edge课程的学习,这个课程主要讲授有关R语言的内容,这里会总结一些重点操作,这一章主要介绍了一些基本操作。

课程地址:

https://www.edx.org/course/the-analytics-edge

Basic Calculations

来看几个基本运算

8*6

48

2^16

65536

Variables

先定义几个变量

SquareRoot2 = sqrt(2)
SquareRoot2

1.4142135623731

HoursYear <- 365*24
HoursYear

8760

ls()操作可以看到有哪些变量。

ls()

‘HoursYear’ ‘SquareRoot2’

rm可以删除变量。

rm(HoursYear)

Vectors

R中构建数组的方式是使用c(1,2)这样的形式,注意R中数组的索引从1开始

array = c(2,3,5,8,13)
array[1]

2

还有一种构建数组的方式是seq(0,100,2),类似于Python中的range(0,100,2),不同之处在于seq是包括首尾元素的。

Sequence = seq(0,100,2)

Data Frame

这里来看R中非常重要的数据结构:Data Frame,先构造一个Data Frame

Country = c("Brazil", "China", "India","Switzerland","USA")
LifeExpectancy = c(74,76,65,83,79)
CountryData = data.frame(Country, LifeExpectancy)
CountryData
Country LifeExpectancy
Brazil 74
China 76
India 65
Switzerland 83
USA 79

查看Data Frame中某一列的方式是使用$符号。

CountryData$Country

也可以利用Data Frame$a = b的形式增加一列。

CountryData$Population = c(199000,1390000,1240000,7997,318000)
CountryData

Data Frame还支持两个Data Frame的按行拼接的操作,利用rbind函数即可。

Country = c("Australia","Greece")
LifeExpectancy = c(82,81)
Population = c(23050,11125)
NewCountryData = data.frame(Country, LifeExpectancy, Population)
NewCountryData

利用rbind将CountryData,NewCountryData合并。

AllCountryData = rbind(CountryData, NewCountryData)
AllCountryData

Change Directory

我们来看如何改变目录以及显示自己所在的目录。

先看显示自己所在的目录。

getwd()

‘E:/The Analytics Edge’

再看如何改变目录。

setwd("E:\\The Analytics Edge\\Unit1 An Introduction to Analytics")

setwd操作非常重要,改变目录后就可以直接读取该目录下的文件了。

Loading csv files

可以利用read.csv读取csv文件,读取的数据存入Data Frame中

WHO = read.csv("WHO.csv")

利用str以及summary来看WHO中的基本信息。

str(WHO)
'data.frame':    194 obs. of  13 variables:
 $ Country                      : Factor w/ 194 levels "Afghanistan",..: 1 2 3 4 5 6 7 8 9 10 ...
 $ Region                       : Factor w/ 6 levels "Africa","Americas",..: 3 4 1 4 1 2 2 4 6 4 ...
 $ Population                   : int  29825 3162 38482 78 20821 89 41087 2969 23050 8464 ...
 $ Under15                      : num  47.4 21.3 27.4 15.2 47.6 ...
 $ Over60                       : num  3.82 14.93 7.17 22.86 3.84 ...
 $ FertilityRate                : num  5.4 1.75 2.83 NA 6.1 2.12 2.2 1.74 1.89 1.44 ...
 $ LifeExpectancy               : int  60 74 73 82 51 75 76 71 82 81 ...
 $ ChildMortality               : num  98.5 16.7 20 3.2 163.5 ...
 $ CellularSubscribers          : num  54.3 96.4 99 75.5 48.4 ...
 $ LiteracyRate                 : num  NA NA NA NA 70.1 99 97.8 99.6 NA NA ...
 $ GNI                          : num  1140 8820 8310 NA 5230 ...
 $ PrimarySchoolEnrollmentMale  : num  NA NA 98.2 78.4 93.1 91.1 NA NA 96.9 NA ...
 $ PrimarySchoolEnrollmentFemale: num  NA NA 96.4 79.4 78.2 84.5 NA NA 97.5 NA ...
summary(WHO)
                Country                      Region     Population     
 Afghanistan        :  1   Africa               :46   Min.   :      1  
 Albania            :  1   Americas             :35   1st Qu.:   1696  
 Algeria            :  1   Eastern Mediterranean:22   Median :   7790  
 Andorra            :  1   Europe               :53   Mean   :  36360  
 Angola             :  1   South-East Asia      :11   3rd Qu.:  24535  
 Antigua and Barbuda:  1   Western Pacific      :27   Max.   :1390000  
 (Other)            :188                                               
    Under15          Over60      FertilityRate   LifeExpectancy 
 Min.   :13.12   Min.   : 0.81   Min.   :1.260   Min.   :47.00  
 1st Qu.:18.72   1st Qu.: 5.20   1st Qu.:1.835   1st Qu.:64.00  
 Median :28.65   Median : 8.53   Median :2.400   Median :72.50  
 Mean   :28.73   Mean   :11.16   Mean   :2.941   Mean   :70.01  
 3rd Qu.:37.75   3rd Qu.:16.69   3rd Qu.:3.905   3rd Qu.:76.00  
 Max.   :49.99   Max.   :31.92   Max.   :7.580   Max.   :83.00  
                                 NA's   :11                     
 ChildMortality    CellularSubscribers  LiteracyRate        GNI       
 Min.   :  2.200   Min.   :  2.57      Min.   :31.10   Min.   :  340  
 1st Qu.:  8.425   1st Qu.: 63.57      1st Qu.:71.60   1st Qu.: 2335  
 Median : 18.600   Median : 97.75      Median :91.80   Median : 7870  
 Mean   : 36.149   Mean   : 93.64      Mean   :83.71   Mean   :13321  
 3rd Qu.: 55.975   3rd Qu.:120.81      3rd Qu.:97.85   3rd Qu.:17558  
 Max.   :181.600   Max.   :196.41      Max.   :99.80   Max.   :86440  
                   NA's   :10          NA's   :91      NA's   :32     
 PrimarySchoolEnrollmentMale PrimarySchoolEnrollmentFemale
 Min.   : 37.20              Min.   : 32.50               
 1st Qu.: 87.70              1st Qu.: 87.30               
 Median : 94.70              Median : 95.10               
 Mean   : 90.85              Mean   : 89.63               
 3rd Qu.: 98.10              3rd Qu.: 97.90               
 Max.   :100.00              Max.   :100.00               
 NA's   :93                  NA's   :93                   

Basic data analysis

利用sd(标准差),mean以及summary可以得到一些基本统计量。

mean(WHO$Under15)

28.7324226804124

sd(WHO$Under15)

10.5345733199238

summary(WHO$Under15)
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
  13.12   18.72   28.65   28.73   37.75   49.99 

which.min, which.max函数可以得到最小值以及最大值对应的索引。

which.min(WHO$Under15)
WHO$Country[86]

86

Japan

which.max(WHO$Under15)
WHO$Country[124]

124

Niger

Subsetting

利用subset可以获取Data Frame中部分数据。

Outliers = subset(WHO, GNI > 10000 & FertilityRate > 2.5) 
nrow(Outliers)

7

上述nrow函数计算Data Frame的行数。

还可以利用Data Frame[c(a, b, c)]的方式取部分数据。

Outliers[c("Country","GNI","FertilityRate")]

Plot

R中的作图函数非常方便,我们分别看下。

折线图:

plot(WHO$GNI, WHO$FertilityRate)

png

箱线图:

boxplot(WHO$LifeExpectancy ~ WHO$Region, xlab = "Country", ylab = "Life Expectancy", main = "Life Expectancy of Countries by Region")

png

xlab给横坐标的名字,ylab给出纵坐标的名字,main给出图像的名字。

直方图:

hist(WHO$CellularSubscribers)

png

Summary Tables

table函数可以对数据进行总结,非常方便。

table(AllCountryData$LifeExpectancy, AllCountryData$Country)
     Brazil China India Switzerland USA Australia Greece
  65      0     0     1           0   0         0      0
  74      1     0     0           0   0         0      0
  76      0     1     0           0   0         0      0
  79      0     0     0           0   1         0      0
  81      0     0     0           0   0         0      1
  82      0     0     0           0   0         1      0
  83      0     0     0           1   0         0      0

tapply函数会产生交叉表。

tapply(WHO$LiteracyRate, WHO$Region, min, na.rm=TRUE)

min的意思是使用的函数,可以换成mean,max等等,na.rm=TRUE表示删除缺失值。

Others

as.numeric函数可以把TRUE,FALSE转化为0,1

data = Outliers$GNI > 30
as.numeric(data)

sort函数可以排序

sort(table(Outliers$GNI))
11250 13740 14510 14550 24700 25620 27110 
    1     1     1     1     1     1     1 

as.Date函数可以把数据转化为日期类型,这个函数出现在作业部分,使用方法如下。

Boeing$Date = as.Date(Boeing$Date, "%m/%d/%y")